zhouqijie

简单的天空盒和天空穹顶

天空盒:

天空穹顶:


CubeMap实现天空盒

优点是可减少接缝以及支持环境贴图。

实现

layout (location = 0) in vec3 position; out vec3 cubetc;

uniform mat4 v_matrix; uniform mat4 p_matrix; layout (binding = 0) uniform samplerCube samp;

void main(void) { cubetc = position;//纹理坐标就是顶点坐标 mat4 v3_matrix = mat4(mat3(v_matrix));//去除V矩阵中的平移 gl_Position = p_matrix * v3_matrix * vec4(position,1.0); }

//frag shader: #version 430

in vec3 cubetc; out vec4 fragColor;

uniform mat4 v_matrix; uniform mat4 p_matrix; layout (binding = 0) uniform samplerCube samp;

void main(void) { fragColor = texture(samp,cubetc); }


<br />

# CubeMap实现环境贴图  

程序:
```CPP
//...
//激活环境纹理
glActiveTexture(GL_TEXTURE???);			//纹理单元1-绑定环境纹理
glBindTexture(GL_TEXTURE_CUBE_MAP, texSkybox);
//激活其他纹理...
//绘制...

着色器:

//片段着色器的部分代码
//...
layout(binding = 1) uniform samplerCube envTex;
//...

void main(void)
{
	vec3 Nview = normalize(varyingNormal);
	vec3 Lview = normalize((v_matrix * vec4(-light.dir, 0.0)).xyz);
	vec3 Vview = normalize(-varyingPos);
	vec3 Hview = normalize(Lview + Vview);
	vec3 Rview = reflect(normalize(varyingPos), normalize(varyingNormal));

	vec3 Rworld = (vec4(Rview, 0.0) * v_matrix).xyz;

	vec4 env_color = texture(envTex,Rworld);
    //...
    //(可以视光滑/粗糙度进行滤波模糊)
}